package br.unicamp.ic.inf300.arena.modelo.vendas;
/**
 * Venda de Bilhetes Eletronicos para Espetaculos (Arena Entretenimento S.A.)
 * Estorno.java
 */

import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Collection;

public class Estorno {

	private long numero;

	private Timestamp dataHora;

	private Venda venda;

	private Collection<Bilhete> billhetes;

	private Collection<ValeEntrada> valesEntrada;

	public Estorno() {
		this.billhetes    = new ArrayList<Bilhete>();
		this.valesEntrada = new ArrayList<ValeEntrada>();
	}

	/**
	 * 
	 * @param numero
	 * @param dataHora
	 * @param venda
	 * @param billhetes
	 * @param valesEntrada
	 */
	public Estorno(long numero, Timestamp dataHora, Venda venda,
			Collection<Bilhete> billhetes, Collection<ValeEntrada> valesEntrada) {
		super();
		this.numero = numero;
		this.dataHora = dataHora;
		this.venda = venda;
		this.billhetes = billhetes;
		this.valesEntrada = valesEntrada;
	}

	public Collection<Bilhete> getBilhetes() {
		return this.billhetes;
	}

	public void setBillhetes(Collection<Bilhete> billhetes) {
		this.billhetes = billhetes;
	}

	public Venda getVenda() {
		return venda;
	}

	public void setVenda(Venda venda) {
		this.venda = venda;
	}

	public Timestamp getDataHora() {
		return dataHora;
	}

	public void setDataHora(Timestamp dataHora) {
		this.dataHora = dataHora;
	}

	public long getNumero() {
		return this.numero;
	}

	public void setNumero(long numero) {
		this.numero = numero;
	}

	public Collection<ValeEntrada> getValesEntrada() {
		return valesEntrada;
	}

	public void setValesEntrada(Collection<ValeEntrada> valesEntrada) {
		this.valesEntrada = valesEntrada;
	}

	/**
	 * @return <code>String</code>
	 * JUtils plugin ;-)
	 */
	public String toString()
	{
	    final String TAB = "    ";
	    
	    StringBuffer retValue = new StringBuffer();
	    
	    retValue.append("Estorno ( ")
	        .append(super.toString()).append(TAB)
	        .append("billhetes = ").append(this.billhetes).append(TAB)
	        .append("dataHora = ").append(this.dataHora).append(TAB)
	        .append("numero = ").append(this.numero).append(TAB)
	        .append("valesEntrada = ").append(this.valesEntrada).append(TAB)
	        .append("venda = ").append(this.venda).append(TAB)
	        .append(" )");
	    
	    return retValue.toString();
	}

	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result
				+ ((dataHora == null) ? 0 : dataHora.hashCode());
		result = prime * result + (int) (numero ^ (numero >>> 32));
		return result;
	}

	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		final Estorno other = (Estorno) obj;
		if (dataHora == null) {
			if (other.dataHora != null)
				return false;
		} else if (!dataHora.equals(other.dataHora))
			return false;
		if (numero != other.numero)
			return false;
		return true;
	}
}